home *** CD-ROM | disk | FTP | other *** search
- package com.sun.xml.parser;
-
- import com.sun.xml.util.XmlNames;
- import java.util.Enumeration;
- import java.util.StringTokenizer;
- import org.xml.sax.SAXException;
-
- public class ValidatingParser extends Parser {
- private SimpleHashtable ids;
- private final EmptyValidator EMPTY;
-
- public ValidatingParser() {
- this.ids = new SimpleHashtable();
- this.EMPTY = new EmptyValidator(this);
- ((Parser)this).setIsValidating(true);
- }
-
- public ValidatingParser(boolean var1) {
- this();
- if (var1) {
- ((Parser)this).setErrorHandler(new 1());
- }
-
- }
-
- void afterDocument() {
- this.ids.clear();
- }
-
- void afterRoot() throws SAXException {
- Enumeration var1 = this.ids.keys();
-
- while(var1.hasMoreElements()) {
- String var2 = (String)var1.nextElement();
- Boolean var3 = (Boolean)this.ids.get(var2);
- if (Boolean.FALSE == var3) {
- ((Parser)this).error("V-024", new Object[]{var2});
- }
- }
-
- }
-
- private boolean isUnparsedEntity(String var1) {
- Object var2 = super.entities.getNonInterned(var1);
- if (var2 != null && var2 instanceof ExternalEntity) {
- return ((ExternalEntity)var2).notation != null;
- } else {
- return false;
- }
- }
-
- ContentModel newContentModel(char var1, ContentModel var2) {
- return new ContentModel(var1, var2);
- }
-
- ContentModel newContentModel(String var1) {
- return new ContentModel(var1);
- }
-
- ElementValidator newValidator(ElementDecl var1) {
- if (var1.validator != null) {
- return var1.validator;
- } else if (var1.model != null) {
- return new ChildrenValidator(this, var1);
- } else {
- if (var1.contentType != null && var1.contentType != "ANY") {
- if (var1.contentType == "EMPTY") {
- var1.validator = this.EMPTY;
- } else {
- var1.validator = new MixedValidator(this, var1);
- }
- } else {
- var1.validator = ElementValidator.ANY;
- }
-
- return var1.validator;
- }
- }
-
- void validateAttributeSyntax(AttributeDecl var1, String var2) throws SAXException {
- if (var1.type == "ID") {
- if (!XmlNames.isName(var2)) {
- ((Parser)this).error("V-025", new Object[]{var2});
- }
-
- Boolean var3 = (Boolean)this.ids.getNonInterned(var2);
- if (var3 != null && !var3.equals(Boolean.FALSE)) {
- ((Parser)this).error("V-026", new Object[]{var2});
- } else {
- this.ids.put(var2.intern(), Boolean.TRUE);
- }
- } else if (var1.type == "IDREF") {
- if (!XmlNames.isName(var2)) {
- ((Parser)this).error("V-027", new Object[]{var2});
- }
-
- Boolean var9 = (Boolean)this.ids.getNonInterned(var2);
- if (var9 == null) {
- this.ids.put(var2.intern(), Boolean.FALSE);
- }
- } else if (var1.type == "IDREFS") {
- StringTokenizer var10 = new StringTokenizer(var2);
-
- boolean var5;
- for(var5 = false; var10.hasMoreTokens(); var5 = true) {
- var2 = var10.nextToken();
- if (!XmlNames.isName(var2)) {
- ((Parser)this).error("V-027", new Object[]{var2});
- }
-
- Boolean var4 = (Boolean)this.ids.getNonInterned(var2);
- if (var4 == null) {
- this.ids.put(var2.intern(), Boolean.FALSE);
- }
- }
-
- if (!var5) {
- ((Parser)this).error("V-039", (Object[])null);
- }
- } else if (var1.type == "NMTOKEN") {
- if (!XmlNames.isNmtoken(var2)) {
- ((Parser)this).error("V-028", new Object[]{var2});
- }
- } else if (var1.type == "NMTOKENS") {
- StringTokenizer var11 = new StringTokenizer(var2);
-
- boolean var15;
- for(var15 = false; var11.hasMoreTokens(); var15 = true) {
- var2 = var11.nextToken();
- if (!XmlNames.isNmtoken(var2)) {
- ((Parser)this).error("V-028", new Object[]{var2});
- }
- }
-
- if (!var15) {
- ((Parser)this).error("V-032", (Object[])null);
- }
- } else if (var1.type == "ENUMERATION") {
- for(int var12 = 0; var12 < var1.values.length; ++var12) {
- if (var2.equals(var1.values[var12])) {
- return;
- }
- }
-
- ((Parser)this).error("V-029", new Object[]{var2});
- } else if (var1.type == "NOTATION") {
- for(int var13 = 0; var13 < var1.values.length; ++var13) {
- if (var2.equals(var1.values[var13])) {
- return;
- }
- }
-
- ((Parser)this).error("V-030", new Object[]{var2});
- } else if (var1.type == "ENTITY") {
- if (!this.isUnparsedEntity(var2)) {
- ((Parser)this).error("V-031", new Object[]{var2});
- }
- } else if (var1.type == "ENTITIES") {
- StringTokenizer var14 = new StringTokenizer(var2);
-
- boolean var16;
- for(var16 = false; var14.hasMoreTokens(); var16 = true) {
- var2 = var14.nextToken();
- if (!this.isUnparsedEntity(var2)) {
- ((Parser)this).error("V-031", new Object[]{var2});
- }
- }
-
- if (!var16) {
- ((Parser)this).error("V-040", (Object[])null);
- }
- } else if (var1.type != "CDATA") {
- throw new InternalError(var1.type);
- }
-
- }
- }
-